import http from "../service/http.js"
export const loginModule = {
	state: {

		token: uni.getStorageSync("token") || "", //jwt登录鉴权 有无登录的标志
		code: "", //登录验证获取的code
		userInfoCertificate: null,
		phone: uni.getStorageSync("phone") || "", //手机号 代表有绑定手机

		// {
		// 	// 用户信息凭证
		// 	encryptedData: "", //包括敏感数据在内的完整用户信息的加密数据，详细见加密数据解密算法。
		// 	ivStr: "", //加密算法的初始向量，详细见加密数据解密算法。
		// },

		openid: null, //同系列应用用户唯一凭证

	},
	mutations: {
		login(state, token) {
			state.token = token;
		},
		logout(state) {
			state.token = ""
			state.openid = null
			

		},
		setCode(state, code) {
			state.code = code
		},
		setUserInfoCertificate(state, userInfoCertificate) {
			state.userInfoCertificate = userInfoCertificate
		},
		setOpenid(state, openid) {
			state.openid = openid
		},
		setPhone(state, phone) {
			state.phone = phone
		}


	},
	getters: {

	},
	actions: {
		mpLogin: async function({ //小程序登录
			commit,
			state
		}) {
			return await new Promise((resolve, reject) => {
				if (state.openid) {
					resolve(state.openid)
				} else {
					uni.login({
						// #ifdef MP-WEIXIN
						provider: 'weixin',
						// #endif

						success: (data) => {
							let code = data.code
							console.log("login", data);
							commit('setCode', code)

							resolve(code)
						},
						fail: (err) => {
							console.log('uni.login 接口调用失败，将无法正常使用开放接口等服务', err)
							reject(err)
						}
					})
				}
			})
		},
		mpGetUserInfo: async function({ //小程序获取用户信息
			commit,
			state
		}) {

			return await new Promise((resolve, reject) => {
				if (state.userInfo) {
					resolve(state.userInfo)
				} else {

					uni.getUserInfo({
						// #ifdef MP-WEIXIN
						provider: 'weixin',
						// #endif

						success: (data) => {
							console.log("userInfo", data);
							let userInfo = data.userInfo
							let encryptedData = data.encryptedData
							let ivStr = data.iv
							commit('setUserInfoCertificate', {
								encryptedData: encryptedData,
								ivStr: ivStr
							})


							resolve(data)
						},
						fail: (err) => {
							console.log('uni.getUserInfo 接口调用失败，将无法正常使用开放接口等服务', err)
							reject(err)
						}
					})
				}
			})
		},
		sysLogin: async function(

			{
				dispatch,
				commit,
				state
			}, params
			// {
			// 	encryptedData, //包括敏感数据在内的完整用户信息的加密数据，详细见加密数据解密算法。
			// 	iv, //加密算法的初始向量，详细见加密数据解密算法。
			// }
		) {
			// 系统登录
			// console.log("encryptedData",encryptedData,"iv",iv)
			let option = {
				code: state.code,
			}
			if (params) {
				option.encryptedData = params.encryptedData
				option.ivStr = params.iv
			}
			return await new Promise((resolve, reject) => {
				http.post('/auth/login', option).then(res => {
					let data = res.data.data
					console.log("登录成功", res)
					commit('login', data.token)
					uni.setStorageSync("token", data.token)
					commit('setOpenid', data.jpUser.openid)
					commit('setPhone', data.jpUser.mobile)
					uni.setStorageSync("phone", data.jpUser.mobile)
					commit("setUserInfo", data.jpUser)
					commit("setUserEditFrom", {
						mobile: data.jpUser.mobile, //手机
						userNick: data.jpUser.userNick, //昵称
						school: data.jpUser.school, //学校
						grade: data.jpUser.banji //班级
					})
					dispatch("getAddressList")
					dispatch("getRegionList")
					dispatch("getOrderCount")
					dispatch("getCatrList")
					resolve(res)

				}).catch(err => {
					console.log("登录失败", err)
					reject(err)
				})

			})
		},
		bindPhone: async function(

			{
				dispatch,
				commit,
				state
			}, params
			// {
			// 	"code": "string", //code登录
			// 	  "encryptedData": "string", // 包括敏感数据在内的完整用户信息的加密数据，详细见加密数据解密算法。
			// 	  "ivStr": "string", //加密算法的初始向量，详细见加密数据解密算法。
			// 	  "sessionKey": "string" 
			// }

		) {
			// 绑定手机号
			// console.log("encryptedData",encryptedData,"iv",iv)
			return await new Promise((resolve, reject) => {
				http.post('/auth/bind/phone', params).then(res => {
					let data = res.data.data

					console.log("绑定电话成功", res)
					commit('setPhone', data.mobile)
					commit("setUserInfo", data)
					commit("setUserEditFrom", {
						mobile: data.mobile, //手机
						userNick: data.userNick, //昵称
						school: data.school, //学校
						grade: data.banji //班级
					})
					uni.setStorageSync("phone", data.mobile)
					resolve(data.mobile)

				}).catch(err => {
					console.log("绑定失败", err)
					reject(err)
				})

			})
		},
		login: async function({
			dispatch,
			commit,
			state
		}) {
			return await new Promise((resolve, reject) => {
				// #ifdef MP
				// 小程序常规全局登录属于第二次登录 只传code 点击授权是第一次
				dispatch("mpLogin").then(loginRes => {
					// dispatch("mpGetUserInfo").then(userInfoRes => {
					dispatch("sysLogin").then(sysloginRes => {
						resolve(sysloginRes)
					})
					
					// }).catch(err => {
					// 	console.log('uni.login 接口调用失败，将无法正常使用开放接口等服务', err)
					// 	reject(err)
					// })
				}).catch(err => {
					console.log('uni.login 接口调用失败，将无法正常使用开放接口等服务', err)
					reject(err)
				})
				// #endif


			})
		},
		logOut: function({
			dispatch,
			commit,
			state
		}) {
			commit("logout")
			commit("clearUserInfo")
			commit("clearGoodList")
			uni.removeStorageSync("token")
		}
	}
}
